import os
import yaml
from typing import List, Dict

# 定义文件路径
MKDOCS_FILE = "mkdocs.yml"
DOCS_DIR = "docs"
SCAN_IGNORE = ["docs/ignoreFloder"]

# 读取并解析 mkdocs.yml 文件
def load_mkdocs_config() -> Dict:
    try:
        with open(MKDOCS_FILE, "r", encoding="utf-8") as file:
            return yaml.safe_load(file)
    except FileNotFoundError:
        return {"site_name": "Dataview", "nav": []}  # 默认配置

# 保存更新后的 mkdocs.yml 文件
def save_mkdocs_config(config: Dict):
    with open(MKDOCS_FILE, "w", encoding="utf-8") as file:
        yaml.dump(config, file, default_flow_style=False, sort_keys=False, allow_unicode=True)

# 递归扫描 docs 文件夹并生成目录结构
def scan_docs_folder(docs_dir: str) -> List:
    nav = []
    for item in sorted(os.listdir(docs_dir)):
        print("item:"+item)
        # if item.con(SCAN_IGNORE):
        #     print("skip: "+item)
        #     continue
        item_path = os.path.join(docs_dir, item)
        relative_path = os.path.relpath(item_path, DOCS_DIR)
        if os.path.isdir(item_path):
            # 如果是文件夹，递归扫描
            sub_nav = scan_docs_folder(item_path)
            if sub_nav:  # 只有非空文件夹才添加
                nav.append({item: sub_nav})
        elif item.endswith(".md"):
            # 如果是 .md 文件，以 "文件名称: 文件相对路径" 的格式添加
            file_name = os.path.splitext(item)[0]  # 去掉文件扩展名
            nav.append({file_name: relative_path})
    return nav

# 主函数
def main():
    # 扫描 docs 文件夹
    print("正在扫描 docs 文件夹...")
    nav_structure = scan_docs_folder(DOCS_DIR)

    # 加载 mkdocs.yml 配置
    config = load_mkdocs_config()
    config["nav"] = nav_structure
    # 保存更新后的 mkdocs.yml 文件
    save_mkdocs_config(config)
    print("mkdocs.yml 文件已更新，所有 .md 文件已添加。")

if __name__ == "__main__":
    main()
